package middlewares

import (
	"lingc/utils"

	"github.com/gin-gonic/gin"
)

// MemberMiddleware 是一个登录校验的中间件
func MemberMiddleware() gin.HandlerFunc {
	return func(c *gin.Context) {
		// 这里简单模拟一个登录校验逻辑，实际应用中可能需要从请求头或cookie中获取token并验证
		token := c.GetHeader("Authorization")
		if token == "" {
			utils.SendJSONResponse(c, utils.ErrorToken, gin.H{"msg": "未授权", "code": 1})
			c.Abort()
			return
		}
		user := utils.ValidateToken(token)
		// 验证token
		if user == nil {
			utils.SendJSONResponse(c, utils.ErrorToken, gin.H{"msg": "无效的token"})
			c.Abort()
			return
		}
		// 判断用户类型
		if user.Type != "member" {
			utils.SendJSONResponse(c, utils.ErrorToken, gin.H{"msg": "无效的token", "code": 1})
			c.Abort()
			return
		}
		//获取缓存token
		redis_token := utils.GetRedis(utils.GenerateMD5("user_token_" + user.Username))
		if redis_token == "" {
			utils.SendJSONResponse(c, utils.ErrorToken, gin.H{"msg": "无效的token", "code": 1})
			c.Abort()
			return
		}
		if token != redis_token {
			utils.SendJSONResponse(c, utils.ErrorToken, gin.H{"msg": "无效的token", "code": 2})
			c.Abort()
			return
		}
		// Set the user in the context
		// log.Println("user:", user)
		c.Set("user", user)
		c.Next()
	}
}
